using SqlSugar;
using Digitalmes.Domain.Repositories;

namespace Digitalmes.Infrastructure.Data;

/// <summary>
/// 基于 SqlSugar 框架的仓储对象，带有作用域。
/// </summary>
internal sealed class SqlSugarRepository<T> : SimpleClient<T>, IRepository<T>
    where T : class, IEntity, new ()
{
    public ITenant Tenant { get; } // 多租户事务、GetConnection、IsAnyConnection等功能

    public SqlSugarRepository(ISqlSugarClient context) : base(context)
    {
        Tenant = context.AsTenant(); // 用来处理事务
        Context = Tenant.GetConnectionScopeWithAttr<T>(); // 线程安全，作用域 Scope，根据实体配置的 <TenantAttribute> 使用对应的 DB。
    }

    public async Task<T?> GetByIdAsync(long id, CancellationToken cancellationToken = default)
    {
        return await base.GetByIdAsync(id, cancellationToken);
    }
}
